<?php
namespace zake\server;

use zake\foundation\able\ProtocolAble;
use zake\foundation\able\stream\ReadBufferAble;

/**
 * Class ChannelProtocol
 * @package zake\server
 *
 * 管道通信协议
 */
class ChannelProtocol implements ProtocolAble
{
    // 通信协议
    // ---- ---- + ---- ---- + ---- ---- +
    //



    /**
     * 回调执行message
     * @param \Closure $callBack
     * @param ReadBufferAble $stream
     * @param \Closure|null $closeCallBack
     * @return mixed
     *
     * @author liu.bin 2020-04-28 15:39
     */
    public function frame(\Closure $callBack, ReadBufferAble $stream, $closeCallBack = null)
    {
        // TODO: Implement frame() method.
    }

    /**
     * 头部偏移量
     *
     * @return int
     *
     * @author liu.bin 2020-03-27 15:32
     */
    public function offset()
    {
        // TODO: Implement offset() method.
    }

    /**
     * 解包 格式化输出数据包的内容
     *
     * 比如http协议：可以格式化$_GET ,$_POST，header等等
     *
     * @param string $buffer
     * @return string
     */
    public function decode($buffer, ReadBufferAble $stream = null)
    {
        // TODO: Implement decode() method.
    }

    /**
     * 数据打包
     *
     * 比如http协议，buffer只为http的body部分，此处需要添加http的header部分
     *
     * @param string $buffer
     * @return string
     */
    public function encode($buffer, ReadBufferAble $stream = null)
    {
        // TODO: Implement encode() method.
    }
}
